U ovoj analizi smo uz pomoć podataka online ankete proveli segmentaciju. Koristeći K-means algoritam smo segmentirali ispitanike u 4 skupine - Rookies, Passivists, Veterans i Addicts. Svaku smo skupinu pobliže opisali te ćemo na temelju dobivenih skupina stvoriti buyer persone. Uz to, vidjeli smo tko su kupci Kiehl’sa, što vole, uz što asociraju Kiehl’s i kako ocijenju kvalitetu Kiehl’s proizvoda i usluga, te smo vidjeli da su spremni i žele koristiti Kiehl’s online trgovinu.
Za segmentiranje kupaca koristili smo podatke dobivene online anketom. Anketa je dijeljena putem društvenih mreža kroz razdoblje od tjedan dana (15.03.2018-22.03.2019), te je dostupna na sljedećoj poveznici. Anketa se je sastojala od 54 pitanja, raspoeređenih u 5 sekcija - socijodemografski podatci, osobnost i navike pojedinca, navike u vezi zdravlja kože, mišljenje o Kiehl’s-u te navike u vezi online kupnje skincare proizvoda. Cilj je uz pomoć dobivenih podataka segmentirati kupce na nekoliko klastera iz kojih će se potom formirati buyer persone, prema kojima će se kasnije optimizirati marketinški i komunikacijski planovi.
required_packages <- c(
"caret",
"tidyverse",
"RColorBrewer",
"knitr",
"rworldmap",
"leaflet",
"plotly"
)
packages_to_install <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(packages_to_install)) install.packages(packages_to_install)
suppressMessages(lapply(required_packages, require, character.only = TRUE))
## Import the data
unzip("Kiehl's survey.csv.zip")
data_raw <- read.csv("Kiehl's survey.csv", stringsAsFactors = FALSE)
## Assign raw data and rename the variables
data <- data_raw
names(data) <- c("time.stamp", "person.gender", "person.age", "person.country", "person.residency", "person.profession",
"person.education", "person.income", "person.ethnicity", "person.marital", "person.children",
"behave.time.online", "behave.online.buy", "behave.phone.buy", "behave.phone.use",
"behave.sociality", "behave.social.nets", "behave.sporty", "behave.environment", "behave.trendy",
"behave.skincare.care", "behave.skincare.use", "behave.inform.buy", "behave.expert.recommendations",
"behave.friend.recommendations", "behave.celebrity.recommendation", "behave.where.buy",
"skincare.spend", "skincare.brand", "skincare.natural", "skincare.price",
"skincare.quality", "skincare.mass.premium", "skincare.social.image", "skincare.service",
"skincare.free.samples", "skincare.returns", "skincare.environment.buy", "kiehls.know",
"kiehls.use", "kiehls.satisfaction", "kiehls.service", "kiehls.recommend", "kiehls.product",
"kiehls.associate", "online.service", "online.why", "online.favorite", "online.satisfaction",
"online.frequency", "online.quantity", "online.time", "online.items", "showroom.webroom",
"use.kiehls")
| Varijabla | Opis |
|---|---|
| time.stamp | Vrijeme ispunjavanja ankete |
| person.gender | Spol ispitanika (M/F) |
| person.age | Dob ispitanika |
| person.country | Država ispitanika |
| person.residency | Područje gdje živi ispitanik |
| person.profession | Zanimanje ispitanika |
| person.education | Postignuta razina obrazovanja ispitanika |
| person.income | Mjesečna primanja ispitanika |
| person.ethnicity | Rasa ispitanika |
| person.marital | Bračno stanje ispitanika |
| person.children | Broj djece ispitanika |
| behvave.time.online | Vrijeme koje ispitanik provodi online (1-10) |
| behave.online.buy | Koliko često ispitanik kupuje online (1-10) |
| behave.phone.buy | Koliko često ispitanik kupuje preko mobilnog uređaja (1-10) |
| behave.phone.use | Koliko ispitanik koristi mobilni uređaj i aplikacije (1-10) |
| behave.sociality | Koliko je ispitanik društvena osoba (1-10) |
| behave.social.nets | Koliko ispitanik koristi društvene mreže (1-10) |
| behave.sporty | Koliko se ispitanik bavi sportom (1-10) |
| behave.environment | Koliko ispitanik brine za zaštitu okoliša i životinja (1-10) |
| behave.trendy | Koliko je ispitanik u trendu (1-10) |
| behave.skincare.care | Koliko ispitanik brine za zdravlje kože (1-10) |
| behave.skincare.use | Da li ispitanik koristi skincare proizvode |
| behave.inform.buy | Koliko se ispitanik informira prije kupnje skincare proizvoda (1-10) |
| behave.expert.recommendations | Koliki utjecaj na ispitanika ima preporuka stručnjaka (1-10) |
| behave.friend.recommendations | Koliki utjecaj na ispitanika ima preporuka prijatelja (1-10) |
| behave.celebrity.recommendation | Koliki utjecaj na ispitanika ima preporuka slavne osobe (1-10) |
| behave.where.buy | Koliko često ispitanik kupuje skincare proizvode online (1-10) |
| skincare.spend | Koliko ispitanik mjesečno troši na skincare proizvode |
| skincare.brand | Koji skincare brend ispitanik koristi |
| skincare.natural | Koliko su ispitaniku važni prirodni sastojci u proizvodu (1-10) |
| skincare.price | Koliko je ispitaniku važna cijena skincare proizvoda (1-10) |
| skincare.quality | Koliko je ispitaniku važna kvaliteta skincare proizvoda (1-10) |
| skincare.mass.premium | Koliko često ispitanik kupuje premium skincare proizvode (1-10) |
| skincare.social.image | Koliko je ispitaniku važna socijalna slika brenda (1-10) |
| skincare.service | Koliko je ispitaniku važna kvaliteta usluge u skincare trgovini (1-10) |
| skincare.free.samples | Koliko su ispitaniku važni besplatni uzorci prije kupnje (1-10) |
| skincare.returns | Koliko je ispitaniku važna mogućnost vraćanja proizvoda (1-10) |
| skincare.environment.buy | Koliko je ispitaniku važna društvena odgovornost brenda prije kupnje (1-10) |
| kiehls.know | Koliko je ispitanik upoznat s brendom Kiehl’s (1-10) |
| kiehls.use | Da li ispitanik koristi Kiehl’s |
| kiehls.satisfaction | Koliko je ispitanik zadovoljan s Kiehl’s proizvodima (1-10) |
| kiehls.service | Koliko je ispitanik zadovoljan s Kiehl’s uslugom (1-10) |
| kiehls.recommend | Koliko ispitanik često preporuča Kiehl’s (1-10) |
| kiehls.product | Koji Kiehl’s proizvod ispitanik koristi |
| kiehls.associate | Uz što ispitanik asocira Kiehl’s |
| online.service | Koji online servis ispitanik koristi za kupnju skincare proizvoda |
| online.why | Zašto ispitanik koristi određeni online servis za kupnju skincare proizvoda |
| online.favorite | Što se ispitaniku posebno sviđa kod tog online servisa |
| online.satisfaction | Koliko je ispitanik zadovoljan svojim online servisom (1-10) |
| online.frequency | Koliko često ispitanik posjećuje online servis (1-10) |
| online.quantity | Koliko skincare proizvoda ispitanik kupuje mjesečno (1-10) |
| online.time | Koliko ispitanik pregledava online servis prije kupnje proizvoda (1-10) |
| online.items | Koliko stvari zajedno u košarici kupuje ispitanik (1-10) |
| showroom.webroom | Gdje sebe na skali showroom-webroom sebe vidi ispitanik (1-10) |
| use.kiehls | Da li bi ispitanik koristio Kiehl’s online servis (1-10) |
Pregledali smo podatke u vidu osnovnog sažetka te provjerili da li i koliko ima neostajućih vrijednosti u podatcima. U podatcima ima 140 ispitanika koji su pravilno ispunili anketu da nema vrijednosti koje nedostaju (ne uzimajući u obzir informacije o Kiehl’s-u) te ćemo za segmentaciju koristiti samo njih.
summary(mutate_if(data,is.character, as.factor))
time.stamp person.gender person.age
2019/03/14 10:34:44 PM CET: 1 Female:128 <20 :35
2019/03/14 8:23:17 PM CET : 1 Male : 39 >60 : 5
2019/03/15 1:02:57 AM CET : 1 20-29:86
2019/03/15 1:26:36 PM CET : 1 30-39:29
2019/03/15 1:28:07 PM CET : 1 40-49: 8
2019/03/15 1:28:55 AM CET : 1 50-59: 4
(Other) :161
person.country person.residency person.profession
USA :32 Big city :87 Student : 40
United States:19 Rural area:17 student : 8
Canada : 7 Small town:63 Student : 8
US : 7 Account Manager : 2
Germany : 5 Administrative Assistant: 2
(Other) :96 (Other) :106
NA's : 1 NA's : 1
person.education person.income
Bachelor's degree or eqvivalent:71 $1000-$1499:17
Doctorate degree : 4 $1500-$3000:20
High school graduate :55 $500-$799 :21
Master's degree or eqvivalent :31 $800-$1000 :16
No schooling completed : 3 <$500 :60
Nursery school to 8th grade : 3 >$3000 :33
person.ethnicity person.marital
Asian / Pacific : 17 Married or domestic partnership: 39
Black or African : 9 Separated / Divorced : 7
Hispanic or Latino: 8 Single, never married :119
Other : 5 Widowed : 2
White :128
person.children behave.time.online behave.online.buy behave.phone.buy
0 :150 Min. : 1.000 Min. : 1.000 Min. : 1.000
1 : 8 1st Qu.: 5.000 1st Qu.: 4.000 1st Qu.: 2.000
2 : 7 Median : 7.000 Median : 5.000 Median : 4.000
3+: 2 Mean : 6.868 Mean : 5.407 Mean : 4.569
3rd Qu.: 8.000 3rd Qu.: 7.000 3rd Qu.: 7.000
Max. :10.000 Max. :10.000 Max. :10.000
behave.phone.use behave.sociality behave.social.nets behave.sporty
Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.000
1st Qu.: 6.000 1st Qu.: 3.500 1st Qu.: 3.000 1st Qu.: 2.000
Median : 8.000 Median : 6.000 Median : 6.000 Median : 4.000
Mean : 7.377 Mean : 5.473 Mean : 5.599 Mean : 4.629
3rd Qu.: 9.000 3rd Qu.: 7.500 3rd Qu.: 8.000 3rd Qu.: 7.000
Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
behave.environment behave.trendy behave.skincare.care
Min. : 1.000 Min. : 1.000 Min. : 1.00
1st Qu.: 7.000 1st Qu.: 3.000 1st Qu.: 5.00
Median : 8.000 Median : 5.000 Median : 7.00
Mean : 7.796 Mean : 4.844 Mean : 6.88
3rd Qu.:10.000 3rd Qu.: 7.000 3rd Qu.: 9.00
Max. :10.000 Max. :10.000 Max. :10.00
behave.skincare.use behave.inform.buy behave.expert.recommendations
No : 28 Min. : 1.000 Min. : 1.000
Yes:139 1st Qu.: 6.000 1st Qu.: 5.000
Median : 8.000 Median : 7.000
Mean : 7.299 Mean : 6.333
3rd Qu.: 9.000 3rd Qu.: 8.000
Max. :10.000 Max. :10.000
NA's :20 NA's :20
behave.friend.recommendations behave.celebrity.recommendation
Min. : 1.000 Min. : 1.00
1st Qu.: 4.000 1st Qu.: 1.00
Median : 6.000 Median : 1.00
Mean : 5.986 Mean : 2.66
3rd Qu.: 8.000 3rd Qu.: 4.00
Max. :10.000 Max. :10.00
NA's :20 NA's :20
behave.where.buy skincare.spend skincare.brand skincare.natural
Min. : 1.000 :20 : 34 Min. : 1.000
1st Qu.: 1.000 $10-$19 :49 Garnier : 4 1st Qu.: 4.000
Median : 4.000 $100-$199: 1 Nivea : 4 Median : 6.000
Mean : 4.327 $20-$49 :48 Various : 3 Mean : 5.724
3rd Qu.: 6.000 $50-$99 :12 Neutrogena : 2 3rd Qu.: 8.000
Max. :10.000 <$10 :36 Olay : 2 Max. :10.000
NA's :20 >$200 : 1 (Other) :118 NA's :22
skincare.price skincare.quality skincare.mass.premium
Min. : 1.000 Min. : 2.000 Min. : 1.000
1st Qu.: 6.000 1st Qu.: 8.000 1st Qu.: 5.000
Median : 8.000 Median :10.000 Median : 5.500
Mean : 7.322 Mean : 8.815 Mean : 5.575
3rd Qu.: 9.000 3rd Qu.:10.000 3rd Qu.: 6.750
Max. :10.000 Max. :10.000 Max. :10.000
NA's :21 NA's :21 NA's :21
skincare.social.image skincare.service skincare.free.samples
Min. : 1.000 Min. : 1.000 Min. : 1.000
1st Qu.: 1.000 1st Qu.: 2.750 1st Qu.: 2.000
Median : 4.000 Median : 5.000 Median : 5.000
Mean : 4.103 Mean : 4.667 Mean : 4.973
3rd Qu.: 6.750 3rd Qu.: 7.000 3rd Qu.: 7.000
Max. :10.000 Max. :10.000 Max. :10.000
NA's :21 NA's :23 NA's :21
skincare.returns skincare.environment.buy kiehls.know kiehls.use
Min. : 1.000 Min. : 1.000 Min. : 1.000 No :143
1st Qu.: 3.000 1st Qu.: 6.000 1st Qu.: 1.000 Yes: 24
Median : 5.000 Median : 8.000 Median : 1.000
Mean : 5.207 Mean : 6.979 Mean : 3.551
3rd Qu.: 8.000 3rd Qu.: 9.000 3rd Qu.: 6.000
Max. :10.000 Max. :10.000 Max. :10.000
NA's :22 NA's :22
kiehls.satisfaction kiehls.service kiehls.recommend
Min. : 1.000 Min. : 1.000 Min. : 1.000
1st Qu.: 5.000 1st Qu.: 5.000 1st Qu.: 4.500
Median : 7.000 Median : 7.000 Median : 7.000
Mean : 6.774 Mean : 6.567 Mean : 6.419
3rd Qu.: 8.500 3rd Qu.: 8.000 3rd Qu.: 8.000
Max. :10.000 Max. :10.000 Max. :10.000
NA's :136 NA's :137 NA's :136
kiehls.product
:145
Ultra Facial Cream : 2
... : 1
Avocado Eye Cream : 1
Creamy under eye avocado treatment: 1
eyeliner : 1
(Other) : 16
kiehls.associate
:136
Quality : 5
Natural products;Premium products;Quality : 3
Kiehl's Customer Representatives (store experts in white lab coats): 2
Mr. Bones : 2
Premium products;Quality : 2
(Other) : 17
online.service online.why
:95 :97
Amazon :16 Convenience: 3
Amazon : 2 Convenient : 3
Sephora : 2 Convenient : 2
amazon : 1 Easy : 2
Amazon and the brandâ\200\231s websites : 1 Easy to use: 2
(Other) :50 (Other) :58
online.favorite online.satisfaction online.frequency
:101 Min. : 3.000 Min. : 1.000
Easy : 2 1st Qu.: 7.000 1st Qu.: 4.000
Fast : 2 Median : 8.000 Median : 6.000
See above : 2 Mean : 8.289 Mean : 6.237
... : 1 3rd Qu.:10.000 3rd Qu.: 8.000
? didn't i just answer that?: 1 Max. :10.000 Max. :10.000
(Other) : 58 NA's :91 NA's :91
online.quantity online.time online.items showroom.webroom
Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.000
1st Qu.: 1.000 1st Qu.: 4.000 1st Qu.: 2.000 1st Qu.: 4.000
Median : 2.000 Median : 6.000 Median : 3.000 Median : 5.000
Mean : 2.844 Mean : 5.868 Mean : 3.707 Mean : 5.423
3rd Qu.: 4.000 3rd Qu.: 8.000 3rd Qu.: 5.000 3rd Qu.: 7.000
Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
NA's :90 NA's :91 NA's :92 NA's :89
use.kiehls
Min. : 1.000
1st Qu.: 1.000
Median : 4.000
Mean : 3.904
3rd Qu.: 5.000
Max. :10.000
sum(complete.cases(data))
[1] 21
sum(complete.cases(data[1:40])) ## Complete cases not counting about Kiehl's data
[1] 140
Pregledali smo i osnovna obilježja kompletnog uzoraka, u vidu distribucije po spolu, dobi, primanjima te korištenju skincare proizvoda. Kao što vidimo u uzorku imamo više žena, 128 žena (77%) naspram 39 muškaraca (23%). 35 ispitanika su mlađi od 20 godina (21%), 86 u 20-tim godinama (51%), 29 u 30-tim godinama (17%), te 17 starijih od 40 godina (10%). Nešto više ispitanika ima primanja manja od 500$, dok su ostale skupine ravnomjerno raspoređene. 139 ispitanik (83%) izjavio je da koristi skincare proizvode.
## Data preparation
data1 <- data
data1$person.income <- factor(data1$person.income,
levels=c("<$500", "$500-$799", "$800-$1000", "$1000-$1499", "$1500-$3000", ">$3000"),
ordered=TRUE)
data1$person.age <- factor(data1$person.age, levels=c("<20", "20-29", "30-39", "40-49", "50-59", ">60"),
ordered=TRUE)
## Gender plot
g_summary1 <- ggplot(data1 %>%
group_by(person.gender) %>%
summarize(n=n())) +
geom_col(aes(x=person.gender, y=n, fill=person.gender)) +
labs(x="Spol", y="Broj ispitanika") +
theme(legend.position="none")
## Age plot
g_summary2 <- ggplot(data1 %>%
group_by(person.age) %>%
summarize(n=n())) +
geom_col(aes(x=person.age, y=n, fill=person.age)) +
labs(x="Godine", y="Broj ispitanika") +
theme(legend.position="none")
## Income plot
g_summary3 <- ggplot(data1 %>%
group_by(person.income) %>%
summarize(n=n())) +
geom_col(aes(x=person.income, y=n, fill=person.income)) +
labs(x="Mjesečni prihod", y="Broj ispitanika") +
theme(legend.position="none")
## Skicare use plot
g_summary4 <- ggplot(data1 %>%
group_by(behave.skincare.use) %>%
summarize(n=n())) +
geom_col(aes(x=behave.skincare.use, y=n, fill=behave.skincare.use)) +
labs(x="Korištenje skincare proizvoda", y="Broj ispitanika") +
theme(legend.position="none")
## Plotting all 4 plots
subplot(ggplotly(g_summary1), ggplotly(g_summary2), ggplotly(g_summary3), ggplotly(g_summary4),nrows=2,
titleX=TRUE, titleY=TRUE, margin=c(0.04, 0.04, 0.04, 0.18)) %>%
layout(annotations = list(
list(x = 0 , y = 1.05, text = "Distribucija ispitanika po spolu", showarrow = F, xref='paper', yref='paper'),
list(x = 0.77 , y = 1.05, text = "Distribucija ispitanika po dobi", showarrow = F, xref='paper', yref='paper'),
list(x = 0 , y = 0.48, text = "Distribucija ispitanika po mjesečnom prihodu", showarrow = F, xref='paper', yref='paper'),
list(x = 0.92 , y = 0.48, text = "Distribucija prema korištenju skincare proizvoda", showarrow = F, xref='paper', yref='paper'))
)
Pregledali smo i iz kojih područja dolaze ispitanici. Većina ispitanika (71, 43%) dolazi is SAD-a. Ostali ispitanici dolaze iz: Italije, Njemačke, UK, Australije, Nizozemske, Francuske, Rusije, Švedske, Finske, Kanade, Lihtenštajna, Malezije, Novog Zelanda, Irske, Izraela, Hong Konga, Islanda, Austrije, Estonije, Nigerije, Švicareske, Singapura, Filipina, Indije, Belgije, Norveške, Cipra, Španjolske, Portugala, Malte, Kine, JAR, Vijetnama, Irana, Mađarske, Barbadosa, Poljske, Meksika i Argentine.
## cleaning countries variable
data$person.country <- tolower(data$person.country)
data$person.country <- trimws(data$person.country)
data$person.country <- gsub("us", "usa", data$person.country)
data$person.country <- gsub("usaa", "usa", data$person.country)
data$person.country <- gsub("united states", "usa", data$person.country)
data$person.country <- gsub("unitef states", "usa", data$person.country)
data$person.country <- gsub("uunited states", "usa", data$person.country)
data$person.country <- gsub("uusa", "usa", data$person.country)
data$person.country <- gsub("u.s", "usa", data$person.country)
data$person.country <- gsub("unites states", "usa", data$person.country)
data$person.country <- gsub("united kingdom", "uk", data$person.country)
data$person.country <- gsub("engladn", "uk", data$person.country)
data$person.country <- gsub("england", "uk", data$person.country)
data$person.country <- gsub("wales", "uk", data$person.country)
data$person.country <- gsub("ausatralia", "australia", data$person.country)
data$person.country <- gsub("ausatralia ", "australia", data$person.country)
data$person.country <- gsub("rusasia", "russia", data$person.country)
data$person.country <- gsub("polish", "poland", data$person.country)
data$person.country <- gsub("cyprusa", "cyprus", data$person.country)
data$person.country <- gsub("ausatria", "austria", data$person.country)
data$person.country <- gsub("soutu africa", "south africa", data$person.country)
## Leaflet preparing data
countries <- subset(joinCountryData2Map(data,
joinCode = "NAME",
nameJoinColumn = "person.country", verbose = FALSE),
!is.na(person.gender))
166 codes from your data successfully matched countries in the map
1 codes from your data failed to match with a country code in the map
203 codes from the map weren't represented in your data
num_country <- data %>%
group_by(person.country) %>%
summarise(n=n())
num_country <- num_country[-41,]
num_country <- num_country[order(match(num_country$person.country, countries$person.country)), ]
factpal <- colorFactor(brewer.pal(n = 11, name ="Spectral") , countries$person.country)
labels <- paste0("<strong>", toupper(countries$person.country), "</strong><br/>",
format(num_country$n, digits = 0, big.mark = ".", decimal.mark = ",", scientific = FALSE),
" Ispitanika") %>% lapply(htmltools::HTML)
## Leaflet plot
leaflet(countries) %>%
addTiles() %>%
addPolygons(
fillColor = ~factpal(person.country),
stroke = FALSE,
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")
) %>%
setView(25,20,2)
Za segmentaciju smo se odlučili koristiti K-means algoritam. Više o algoritmu možete pročitati na sljedećoj poveznici. Iako za određivanje broja klastera K nismo vidjeli elbow u grafu ovisnosti ukupnog unutar-klastera zbroja kvadrata J o broju klastera K, odlučili smo se za 4 klastera. Razlog tome je što jedino između 4 i 5 klastera vidimo nekakav pad u zbroju kvadrata, iako nije značajan. U ovom slučaju broj klastera se može mijenjati s obzirom na zahtjeve analize.
Za vizualizaciju podataka proveli smo PCA na podatcima. Na grafu smo bojama označili klastere te vidimo kako su se odvojili klasteri. Unatoč svemu, postoji nekoliko uzoraka gdje je došlo do preklapanja klastera, što je i očekivano jer nema očitog odvajanja klasera broja klastera.
## Cleaning the data
data.pca <- data[,c(2:38)]
data.pca <- data.pca[complete.cases(data.pca),c(-3,-5, -28, -21)]
data.pca$person.gender <- as.integer(factor(data.pca$person.gender,
levels=c("Male", "Female"), ordered = TRUE))
data.pca$person.age <- as.integer(factor(data.pca$person.age,
levels=c("<20", "20-29", "30-39", "40-49", "50-59", ">60"), ordered = TRUE))
data.pca$person.residency <- as.integer(factor(data.pca$person.residency,
levels=c("Rural area", "Small town", "Big city"), ordered = TRUE))
data.pca$person.education <- as.integer(factor(data.pca$person.education,
levels=c("No schooling completed", "Nursery school to 8th grade",
"High school graduate", "Bachelor's degree or eqvivalent",
"Master's degree or eqvivalent", "Doctorate degree"), ordered = TRUE))
data.pca$person.income <- as.integer(factor(data.pca$person.income,
levels=c("<$500", "$500-$799", "$800-$1000", "$1000-$1499",
"$1500-$3000", ">$3000"), ordered = TRUE))
data.pca$person.ethnicity <- as.integer(factor(data.pca$person.ethnicity))
data.pca$person.marital <- as.integer(factor(data.pca$person.marital))
data.pca$person.children <- as.integer(factor(data.pca$person.children,
levels=c("0", "1", "2", "3+"), ordered = TRUE))
data.pca$skincare.spend <- as.integer(factor(data.pca$skincare.spend,
levels=c("<$10", "$10-$19", "$20-$49", "$50-$99", "$100-$199", ">$200"), ordered = TRUE))
data.pca <- data.frame(scale(data.pca))
## PCA and Kmeans
e <- NULL
for (i in 1:30) e[i] <- kmeans(data.pca, i)$tot.withinss
plot_ly(data.frame(J=e, diff=c(Inf,round(diff(e),2)), num_clusters=seq(1:30)), x = ~num_clusters,
y = ~J, text = ~diff) %>%
add_markers() %>%
add_text(textfont = list(family = "Arial",
size = 12,
color = "grey"),
textposition = "top right") %>%
layout(title = "Within error vs. broj klastera",
xaxis = list(title = "Broj klastera K", zeroline = TRUE),
yaxis = list(title = "J", zeroline=TRUE),
showlegend = FALSE)
## Segmenting and plotting clusters
PCA <- predict(preProcess(data.pca, method="pca"), data.pca)
set.seed(9874)
Kmeans <- kmeans(data.pca,4)
ggplot(data.frame(PC1=PCA$PC1, PC2=PCA$PC2, cluster=factor(Kmeans$cluster)), aes(x=PC1, y=PC2, color=cluster)) +
geom_point(size=2)
Prvi klaster su mladi, većinom studenti. Njihovi prihodi su mali te nisu oženjeni i nemaju djecu. Mnogo vremena provode online i na mobitelu, ali rijetko kupuju online, iako mnogo vremena istražuju proizvode online, nakon čega ih kupuju u fizičkoj trgovini. Iako nisu previše aktivni, trude se ostati u trendu i počinju brinuti za zdravlje svoje kože. Prilikom kupnje najviše cijene mišljenja i preporuke stručnjaka i prijatelja, te su im ipak sastav i kvaliteta nešto važniji od same cijene za razliku od drugih klastera. S obzirom na financijske mogućnosti, puno im je važnija usluga koju brend pruža (npr. mogućnost vraćanja i besplatni uzorci), nego li društvena slika brenda. Podjednako se odlučuju za sve vrste proizvoda, ali zasad ipak ne koriste često Kiehl’s. Ovaj klaster smo nazvali Rookies.
Drugi klaster ima nešto više muškaraca te se radi o ljudima u srednjim 20-tima, osrednjih primanja, slobodnih i bez djece. Oni dosta svojeg vremena provode online, ali ne za kupovinu. U rijetkim prigodama kada kupuju online, kupuju više proizvoda koji su im potrebni, ali ipak preferiraju pregledati proizvod online te ga potom kupiti u fizičkoj trgovini. Oni nisu društveno aktivni, ne izlaze, ne bave se sportom, nisu u trendu, te shodno tome ne brinu previše za zdravlje kože. Oni koji koriste skincare proizvode, odlučuju se za najjeftinije, mass proizvode, te im nisu važni niti sastav i kvaliteta proizvoda, niti brend, tj. slika brenda. Ne informiraju se prije kupnje skincare proizvoda te ih ne zanimaju kvaliteta usluge i pogodnosti koje brend pruža. Shodno svemu navedenom, oni ne koriste Kiehl’s i slične proizvode, niti ne planiraju. Ovaj klaster smo nazvali Passivists.
Treći klaster predstavlja pretežno žene starije od 35 godina. One su visoko obrazovane te imaju visoka primanja. U privatnom životu nisu previše aktivne, već se radi o obiteljskim ženama, majkama, kojima je obitelj na prvom mjestu. Iako ne provode mnogo vremena online, one često kupuju online putem webstranica. Prije nego li kupe online proizvod, vole ga pregledati u fizičkoj trgovini. One brinu za svoju kožu i koriste primarno premium skincare proizvode, koje još uvijek više kupuju offline. Prije kupnje skincare proizvoda žele biti dobro informirane, te traže preporuke i mišljenja stručnjaka. Kod samog proizvoda najvažnija im je kvaliteta, dok im sastav, cijena i brend nisu previše bitni. Za izbor brenda nije im bitna slika brenda, već pogodnosti koje dobivaju u vidu besplatnih uzoraka i/ili mogućnosti vraćanja proizvoda. Za sada ova grupa ne koristi mnogo Kiehl’s proizvoda. Ovaj klaster smo nazvali Veterans.
Četvrti klaster su većinom mlade žene, u srednjim 20-tim godinama. Ova skupina živi u velikim gradovima, visoko su obrazovani te imaju nešto veća primanja. Jako su aktivni. Puno vremena provode online i na mobitelu, često kupuju online (uključujući skincare proizvode) te koriste sve dostupne servise za kupnju. Puno vremena provode u druženju s prijateljima, na društvenim mrežama i sudjelujući u raznim aktivnostima. Oni su u trendu i brinu za svoje zdravlje te često koriste skincare proizvode. Kod skincare proizvoda najvažniji su im kvaliteta i prirodni sastav te često biraju premium proizvode. Prilikom kupovine žele biti informirani te informacije, preporuke i mišljenja traže na svim dostupnim mjestima. Kako su oni društveno odgovorni, tako im je i bitno koliko je brend društveno odgovoran. Od proizvoda, oni često biraju upravo Kiehl’s te se vrlo lako poistovjećuju s brendom. Ovaj klaster smo nazvali Addicts.
## Cleaning the data
data.pca1 <- data[,c(2:40,50:55)]
data.pca1 <- data.pca1[complete.cases(data[,c(2:38)]),c(-3,-5, -8, -9, -28)]
data.pca1$person.gender <- as.integer(factor(data.pca1$person.gender,
levels=c("Male", "Female"), ordered = TRUE))
data.pca1$person.age <- as.integer(factor(data.pca1$person.age,
levels=c("<20", "20-29", "30-39", "40-49", "50-59", ">60"), ordered = TRUE))
data.pca1$person.residency <- as.integer(factor(data.pca1$person.residency,
levels=c("Rural area", "Small town", "Big city"), ordered = TRUE))
data.pca1$person.education <- as.integer(factor(data.pca1$person.education,
levels=c("No schooling completed", "Nursery school to 8th grade",
"High school graduate", "Bachelor's degree or eqvivalent",
"Master's degree or eqvivalent", "Doctorate degree"), ordered = TRUE))
data.pca1$person.income <- as.integer(factor(data.pca1$person.income,
levels=c("<$500", "$500-$799", "$800-$1000", "$1000-$1499",
"$1500-$3000", ">$3000"), ordered = TRUE))
data.pca1$person.children <- as.integer(factor(data.pca1$person.children,
levels=c("0", "1", "2", "3+"), ordered = TRUE))
data.pca1$skincare.spend <- as.integer(factor(data.pca1$skincare.spend,
levels=c("<$10", "$10-$19", "$20-$49", "$50-$99", "$100-$199", ">$200"), ordered = TRUE))
data.pca1$behave.skincare.use <- as.integer(factor(data.pca1$behave.skincare.use,
levels=c("No", "Yes"), ordered = TRUE))
data.pca1$kiehls.use <- as.integer(factor(data.pca1$kiehls.use,
levels=c("No", "Yes"), ordered = TRUE))
data.pca1$cluster <- Kmeans$cluster
## Plotting summary of all variables per cluster
featurePlot(x=data.pca1[,1:40], y=as.factor(data.pca1[,41]), plot="box",
scales=list(x=list(relation="free"), y=list(relation="free")), par.strip.text=list(cex=0.5),
labels=c("Cluster", ""))
Sekciju pitanja o Kiehl’s-u smo iskoristili kako bismo bolje dobili uvid u status brenda. Od svih 167 ispitanika, samo 24 ih koristi Kiehl’s (14%). Analizirali smo koliko su ispitanici zainteresirani za Kiehl’s online trgovinu, te zainteresiranost nije velika, no čak 40 ispitanika ima nekakav afinitet za nju (24%).
## Kiehls analysis
data.kiehls <- data[,c(39:45,55)]
## Kiehl's users plot
g_kiehls1 <- ggplot(data.kiehls %>%
group_by(kiehls.use) %>%
summarise(n=n()), aes(x=kiehls.use, y=n, fill=kiehls.use)) +
geom_col() +
labs(x="Koriste Kiehl's", y="Broj ispitanika") +
theme(legend.position = "none")
## kiehl's online store users plot
g_kiehls2 <- ggplot(data.kiehls %>%
mutate(use.kiehls=as.factor(use.kiehls)) %>%
group_by(use.kiehls) %>%
summarise(n=n()), aes(x=use.kiehls, y=n, fill=use.kiehls)) +
geom_col() +
labs(x="Želja za korištenjem Kiehl's e-trgovine", y="Broj ispitanika") +
theme(legend.position = "none")
## Plotting both plots
subplot(ggplotly(g_kiehls1), ggplotly(g_kiehls2),
titleX=TRUE, titleY=TRUE, margin=c(0.04, 0.04, 0.04, 0.18)) %>%
layout(annotations = list(
list(x = 0 , y = 1.05, text = "Koliko ispitanika koristi Kiehl's", showarrow = F, xref='paper', yref='paper'),
list(x = 0.8 , y = 1.05, text = "Koliko ispitanika želi koristiti Kiehl's e-trgovinu", showarrow = F, xref='paper', yref='paper'))
)
Osim toga željeli smo vidjeti kakve su preferencije korisnika Kiehl’s-a. Korisnici su većinom zadovoljni s Kiehl’s-om. Kiehl’s proizvode i uslugu najčešće ocijenjuju ocijenom 7. Sa istom učestalošću preporučuju Kiehl’s prijateljima i poznanicima, što je vrlo visoko i vjerojatno temelj WOM.
## Kiehl's users summary plot
ggplotly(ggplot(data.kiehls [complete.cases(data.kiehls),c(3,4,5)] %>%
gather(variable, value), aes(x=variable, y=value)) +
geom_boxplot() +
labs(x="", y="Ocijena (1-10)"))
Klijenti Kiehl’s najčešće asociraju uz kvalitetu, premium proizvode, prirodne sastojke i KCR kao stručno osoblje.
## Kiehl's associations plot
ggplotly(ggplot(data.frame(associate=unlist(strsplit(data.kiehls [complete.cases(data.kiehls),7], split = ";")))) +
geom_bar(aes(associate, fill=associate)) +
theme (legend.position = "none") +
labs(y="Frekvencija", x="Asocijacija"))
Od njih 24 koji koriste Kiehl’s, 19 su žene, većinom u srednjim 20-tim godinama. Oni dolaze iz većih gradova te su završili fakultet ili još uvijek uspješno studiraju na istom. Oni imaju osrednja primanja te nisu oženjeni i nemaju djecu. Dosta vremena provode online i često kupuju online. Dosta su aktivni i društveni te brinu za zdravlje svoje kože. Trude se biti informirani o skincare proizvodu kojeg kupuju, te uz to traže preporuke i mišljena prije kupnje. Na skincare proizvode najčešće troše oko $20-$49. Kod proizvoda najvažnija im je kvaliteta, ali i usluga koju Kiehl’s pruža u vidu besplatnih uzoraka i mogućnosti vraćanja proizvoda ukoliko nisu zadovoljni. Iako često kupuju online, još uvijek više vole razgledati online i kupiti u fizičkoj trgovini. Spremni su i žele koristiti Kiehl’s online trgovinu za kupnju skincare proizvoda.
## Kiehl's users summary
data [,c(-1, -29)] %>%
filter(kiehls.use=="Yes") %>%
mutate_if(is.character, as.factor) %>%
summary
person.gender person.age person.country person.residency
Female:19 <20 : 6 usa :8 Big city :15
Male : 5 20-29:14 uk :5 Rural area: 3
30-39: 2 canada :2 Small town: 6
40-49: 2 germany :2
barbados:1
china :1
(Other) :5
person.profession person.education
student : 5 Bachelor's degree or eqvivalent:15
Student : 5 High school graduate : 6
Administrative Assistant: 1 Master's degree or eqvivalent : 2
Computer Technician : 1 Nursery school to 8th grade : 1
Firefighter : 1
High school student : 1
(Other) :10
person.income person.ethnicity
$1000-$1499:6 Asian / Pacific : 5
$1500-$3000:1 Black or African : 2
$500-$799 :5 Hispanic or Latino: 1
$800-$1000 :1 Other : 2
<$500 :9 White :14
>$3000 :2
person.marital person.children behave.time.online
Married or domestic partnership: 2 0:23 Min. : 2.000
Separated / Divorced : 1 1: 1 1st Qu.: 5.000
Single, never married :21 Median : 7.000
Mean : 6.708
3rd Qu.: 8.000
Max. :10.000
behave.online.buy behave.phone.buy behave.phone.use behave.sociality
Min. : 2.00 Min. : 1.000 Min. : 2.00 Min. : 2.000
1st Qu.: 5.00 1st Qu.: 4.000 1st Qu.: 8.00 1st Qu.: 4.750
Median : 7.00 Median : 7.000 Median : 8.50 Median : 7.500
Mean : 6.25 Mean : 5.958 Mean : 8.25 Mean : 6.875
3rd Qu.: 7.25 3rd Qu.: 8.000 3rd Qu.:10.00 3rd Qu.: 8.250
Max. :10.00 Max. :10.000 Max. :10.00 Max. :10.000
behave.social.nets behave.sporty behave.environment behave.trendy
Min. : 3.000 Min. : 1.000 Min. : 5.000 Min. : 3.000
1st Qu.: 6.000 1st Qu.: 4.000 1st Qu.: 7.000 1st Qu.: 6.750
Median : 8.000 Median : 6.000 Median :10.000 Median : 7.000
Mean : 7.542 Mean : 6.208 Mean : 8.625 Mean : 7.375
3rd Qu.: 9.000 3rd Qu.: 8.250 3rd Qu.:10.000 3rd Qu.: 9.000
Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
behave.skincare.care behave.skincare.use behave.inform.buy
Min. : 6.000 Yes:24 Min. : 4.000
1st Qu.: 8.750 1st Qu.: 7.000
Median :10.000 Median : 9.000
Mean : 8.958 Mean : 8.167
3rd Qu.:10.000 3rd Qu.:10.000
Max. :10.000 Max. :10.000
behave.expert.recommendations behave.friend.recommendations
Min. : 3.000 Min. : 2.00
1st Qu.: 6.000 1st Qu.: 6.75
Median : 8.000 Median : 8.00
Mean : 7.667 Mean : 7.50
3rd Qu.: 9.000 3rd Qu.: 9.00
Max. :10.000 Max. :10.00
behave.celebrity.recommendation behave.where.buy skincare.spend
Min. : 1.00 Min. : 1.00 $10-$19 : 4
1st Qu.: 1.75 1st Qu.: 4.75 $100-$199: 1
Median : 4.50 Median : 6.00 $20-$49 :14
Mean : 4.75 Mean : 6.00 $50-$99 : 3
3rd Qu.: 7.25 3rd Qu.: 8.00 <$10 : 1
Max. :10.00 Max. :10.00 >$200 : 1
skincare.natural skincare.price skincare.quality skincare.mass.premium
Min. : 3.000 Min. : 1.0 Min. : 6.000 Min. : 4.000
1st Qu.: 6.000 1st Qu.: 6.0 1st Qu.: 8.000 1st Qu.: 5.750
Median : 7.500 Median : 8.0 Median :10.000 Median : 6.000
Mean : 7.042 Mean : 7.5 Mean : 9.208 Mean : 6.583
3rd Qu.: 8.000 3rd Qu.:10.0 3rd Qu.:10.000 3rd Qu.: 8.000
Max. :10.000 Max. :10.0 Max. :10.000 Max. :10.000
skincare.social.image skincare.service skincare.free.samples
Min. : 1.000 Min. : 1.000 Min. : 1.000
1st Qu.: 4.750 1st Qu.: 3.000 1st Qu.: 4.750
Median : 6.000 Median : 6.000 Median : 7.000
Mean : 5.792 Mean : 5.348 Mean : 6.417
3rd Qu.: 8.000 3rd Qu.: 7.000 3rd Qu.: 9.000
Max. :10.000 Max. :10.000 Max. :10.000
NA's :1
skincare.returns skincare.environment.buy kiehls.know kiehls.use
Min. : 1.000 Min. : 2.00 Min. : 6.000 Yes:24
1st Qu.: 5.000 1st Qu.: 7.00 1st Qu.: 7.000
Median : 7.000 Median : 8.00 Median : 9.000
Mean : 6.957 Mean : 7.75 Mean : 8.458
3rd Qu.:10.000 3rd Qu.: 9.00 3rd Qu.:10.000
Max. :10.000 Max. :10.00 Max. :10.000
NA's :1
kiehls.satisfaction kiehls.service kiehls.recommend
Min. : 4.000 Min. : 3.000 Min. : 1.000
1st Qu.: 7.000 1st Qu.: 5.500 1st Qu.: 6.000
Median : 8.000 Median : 8.000 Median : 8.000
Mean : 7.708 Mean : 7.261 Mean : 7.375
3rd Qu.: 9.000 3rd Qu.: 9.500 3rd Qu.:10.000
Max. :10.000 Max. :10.000 Max. :10.000
NA's :1
kiehls.product
: 4
Ultra Facial Cream : 2
Avocado Eye Cream : 1
Creamy under eye avocado treatment: 1
eyeliner : 1
face lotion : 1
(Other) :14
kiehls.associate
Quality : 5
Natural products;Premium products;Quality : 3
Kiehl's Customer Representatives (store experts in white lab coats) : 2
Free samples : 1
Kiehl's Customer Representatives (store experts in white lab coats);Free samples;Quality: 1
Kiehl's Customer Representatives (store experts in white lab coats);Mr. Bones : 1
(Other) :11
online.service
: 7
boots : 1
Buy enough for free shop or ship to store : 1
Douglas or any other website the product i am looking for is sold on: 1
Ebay : 1
idk : 1
(Other) :12
online.why
: 8
Access, prices and product availability. : 1
because i dont have to go and physically buy it: 1
convenience : 1
Convenience & samples : 1
Convenient and easy to find products : 1
(Other) :11
online.favorite
: 8
? didn't i just answer that? : 1
Able to read reviews about products, fast shipping and good customer service.: 1
Ease of use, selection : 1
efficency : 1
Free samples, reward points : 1
(Other) :11
online.satisfaction online.frequency online.quantity online.time
Min. : 6.000 Min. : 4.000 Min. : 1.000 Min. : 1.000
1st Qu.: 7.000 1st Qu.: 6.000 1st Qu.: 1.250 1st Qu.: 6.000
Median : 8.000 Median : 7.000 Median : 3.500 Median : 6.000
Mean : 8.353 Mean : 7.389 Mean : 3.667 Mean : 6.722
3rd Qu.:10.000 3rd Qu.:10.000 3rd Qu.: 5.750 3rd Qu.: 9.500
Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
NA's :7 NA's :6 NA's :6 NA's :6
online.items showroom.webroom use.kiehls
Min. : 1.000 Min. : 1.000 Min. : 2.000
1st Qu.: 2.000 1st Qu.: 5.000 1st Qu.: 5.750
Median : 3.500 Median : 6.000 Median : 7.500
Mean : 4.111 Mean : 6.056 Mean : 6.917
3rd Qu.: 5.000 3rd Qu.: 7.000 3rd Qu.: 8.250
Max. :10.000 Max. :10.000 Max. :10.000
NA's :6 NA's :6